home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Hot Mix 17
/
Hot Mix 17.iso
/
HM17_SGI
/
research
/
lib
/
deriv.pro
< prev
next >
Wrap
Text File
|
1997-07-08
|
2KB
|
68 lines
; $Id: deriv.pro,v 1.3 1997/01/15 03:11:50 ali Exp $
;
; Copyright (c) 1984-1997, Research Systems, Inc. All rights reserved.
; Unauthorized reproduction prohibited.
;
Function Deriv, X, Y
;+
; NAME:
; DERIV
;
; PURPOSE:
; Perform numerical differentiation using 3-point, Lagrangian
; interpolation.
;
; CATEGORY:
; Numerical analysis.
;
; CALLING SEQUENCE:
; Dy = Deriv(Y) ;Dy(i)/di, point spacing = 1.
; Dy = Deriv(X, Y) ;Dy/Dx, unequal point spacing.
;
; INPUTS:
; Y: Variable to be differentiated.
; X: Variable to differentiate with respect to. If omitted, unit
; spacing for Y (i.e., X(i) = i) is assumed.
;
; OPTIONAL INPUT PARAMETERS:
; As above.
;
; OUTPUTS:
; Returns the derivative.
;
; COMMON BLOCKS:
; None.
;
; SIDE EFFECTS:
; None.
;
; RESTRICTIONS:
; None.
;
; PROCEDURE:
; See Hildebrand, Introduction to Numerical Analysis, Mc Graw
; Hill, 1956. Page 82.
;
; MODIFICATION HISTORY:
; Written, DMS, Aug, 1984.
;-
;
on_error,2 ;Return to caller if an error occurs
n = n_elements(x)
if n lt 3 then message, 'Parameters must have at least 3 points'
if n_params(0) ge 2 then begin
if n ne n_elements(y) then message,'Vectors must have same size'
d = float(shift(y,-1) - shift(y,1))/(shift(x,-1) - shift(x,1))
d[0] = (-3.0*y[0] + 4.0*y[1] - y[2])/(x[2]-x[0])
d[n-1] = (3.*y[n-1] - 4.*y[n-2] + y[n-3])/(x[n-1]-x[n-3])
end else begin
d = (shift(x,-1) - shift(x,1))/2.
d[0] = (-3.0*x[0] + 4.0*x[1] - x[2])/2.
d[n-1] = (3.*x[n-1] - 4.*x[n-2] + x[n-3])/2.
endelse
return, d
end